// utils/request.js
import axios from 'axios';
import router from '@/router';
import { Toast } from 'vant';
const service = axios.create({
  baseURL: '/api',     // 统一前缀，配合代理跨域
  timeout: 5000,       // 超时时间
});

// 请求拦截器（添加Token等）
service.interceptors.request.use(config => {
  if (!config.cancelToken) {
    config.cancelToken = new axios.CancelToken(() => { });
  }
  const token = localStorage.getItem('token');
  // 重点：非登录请求且无 Token 时跳转登录页
  if (!token && config.url && !config.url.includes('/login')) {
    router.push('/login');
    return Promise.reject(new Error('请先登录'));
  }

  // 存在 Token 则添加到请求头
  if (token) {
    config.headers = config.headers || {};
    config.headers['Authorization'] = `Bearer ${token}`;
  }
  return config;
});

// 响应拦截器（统一处理错误）
service.interceptors.response.use(
  (response) => {
    if (response.data.code === 200) {
      return response.data;
    }
    else if (response.data.code === 401) {
      localStorage.removeItem('token'); // 清除 Token
      localStorage.removeItem('userInfo'); // 清除用户信息
      Toast.fail('登录失效，请重新登录');
      router.replace({
        path: '/login',
        query: { redirect: router.currentRoute.fullPath }
      });
    }
    else if (response.data.code === 10009) {
      Toast.fail(response.data.msg);
    }
    else {
      Toast.fail(response.data.msg);
    }
  }, // 正常响应
  (error) => {
    const status = error.response?.status;
    // Token 失效（401）或自定义错误码（如 10009）
    if (status === 401 || error.response?.data?.code === 10009) {
      localStorage.removeItem('token'); // 清除 Token
      localStorage.removeItem('userInfo'); // 清除用户信息
      Toast.fail('登录失效，请重新登录');
      router.replace({
        path: '/login',
        query: { redirect: router.currentRoute.fullPath }
      });
    }
    return Promise.reject(error);
  }
);
export default service;